home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
COMAL
/
Z-Misc Series
/
(k)zk.d64
/
txt.xpl0
< prev
next >
Wrap
Text File
|
2007-03-01
|
10KB
|
487 lines
*************************************
* *
* ┴ ╙HORT ╔NTRODUCTION ╘O ╘HE *
* ╪╨╠/0 ├OMPILER ╙YSTEM *
* *
*************************************
╔NTRODUCTION
------------
╘HE LANGUAGE ╪╨╠/0 IS AN EXTENSION OF
THE ╨╠/0 LANGUAGE INVENTED BY PROF.
╬. ╫IRTH, TO SERVE AS AN EXAMPLE
LANGUAGE IN A CHAPTER ON COMPILER
TECHNIQUES IN HIS BOOK
┴LGORITHMS+─ATA ╙TRUCTURES=╨ROGRAMS
(╨RENTICE ╚ALL, 1976)
╔N THIS BOOK PROF. ╬.╫IRTH DEVELOPES
A COMPILER SYSTEM CAPABLE OF
COMPILING AND EXECUTING ╨╠/0
PROGRAMS. ╘HIS SYSTEM IS IMPLEMENTED
AS ONE PROGRAM WRITTEN THE HIGH LEVEL
LANGUAGE ╨ASCAL.
╘HE PRESENT IMPLEMENTATION OF ╪╨╠/0
IS A TRANSLATION OF THIS PROGRAM TO
THE NEW HIGH LEVEL LANGUAGE ├╧═┴╠-80,
WITH A FEW EXTENSIONS. ╔N ADDITION,
THE PROGRAM HAS BEEN MODULARIZED IN
ORDER TO DEAL WITH THE STORAGE
RESTRICTIONS OF AN INTERACTIVE
ENVIRONMENT SUCH AS THE ONE OFFERED
BY ├╧═┴╠-80.
╔T MUST BE EMPHASIZED THAT NEITHER
THE LANGUAGE ╪╨╠/0 NOR ITS PRESENT
├╧═┴╠80 BASED IMPLEMENTATION ARE
INTENDED FOR A SERIOUS USE BY A
PROGRAMMER. ╥ATHER, IT IS HOPED TO BE
AN INSTRUCTIVE EXAMPLE ON THE FORCES
OF ├╧═┴╠-80 AND ON COMPILER
TECHNIQUES.
─ESCRIPTION OF ╪╨╠/0
--------------------
┬ELOW THE GENERAL FEATURES AND THE
DETAILED SYNTAX OF ╪╨╠/0 ARE
DESCRIBED.
╪╨╠/0 CAN BEST BE DECRIBED AS A VERY
RESTRICTIVE RELATIVE OF ╨ASCAL. ╔T
REQUIRES ALL USED OBJECTS TO BE
DECLARED BEFORE USE, AND OFFERS
DECLARATION OF CONSTANTS, VARIABLES
(ALL OF INTEGER TYPE) AND
PARAMETERLESS PROCEDURES, WHICH CAN
CONTAIN LOCAL DECLARATIONS OF
CONSTANTS, VARIABLES AND OTHER
PROCEDURES. ╘HE PROCEDURES CAN CALL
THEMSELVES OR EACH OTHER RECURSIVELY,
PRECISELY AS IN ╨ASCAL.
╘HE READER SHOULD CONSULT THE ╪╨╠/0
PROGRAM ╘┼╙╘1 FOR EXAMPLES ON THE
VARIOUS FEATURES OF ╪╨╠/0. ╘HIS
PROGRAM MAY BE OBTAINED BY AN
┼╬╘┼╥ "PL0.TEST1"
COMMAND WHEN IN THE ├╧═┴╠-80 COMMAND
MODE.
╘HE PRIMITIVE STATEMENTS (IE. THOSE
STATEMENTS THAT DO NOT CONTAIN OTHER
STATEMENTS) ARE THE ASSIGNMENT
STATEMENT, THE PROCEDURE CALL
STATEMENT AND THE ╥┼┴─, ╫╥╔╘┼ AND
╫╥╔╘┼╠╬ STATEMENTS.
**** ┴╙╙╔╟╬═┼╬╘ ****
╘HE ASSIGNMENT STATEMENT HAS THE
FORM:
<VAR. IDENTIFIER> := <NUM. EXPRES.>
WHERE <VAR. IDENTIFIER> IS THE NAME
OF A DECLARED VARIABLE, IE. A LETTER
FOLLOWED BY LETTERS AND DIGITS. ╧NLY
THE FIRST 10 LETTERS AND DIGITS ARE
CONSIDERED (THIS IS A COMPILER
CONSTANT WHICH MAY BE CHANGED). ╘HE
EFFECT OF THE ASSIGNMENT STATEMENT IS
THAT THE VALUE OF THE EXPRESSION IS
EVALUATED AND ASSIGNED TO THE
VARIABLE.
╬UMERICAL EXPRESSIONS (TO WHICH THE
<NUM. EXPRES.> ABOVE REFERS) ARE
DEFINED AS USUAL ARITHMETIC
EXPRESSIONS, IN WHICH THE 4 OPERATORS
+ - * / MAY BE USED BETWEEN VARIABLE
IDENTIFIERS, CONSTANT IDENTIFIERS,
NUMBERS AND PARANTHESIZED NUMERICAL
EXPRESSIONS. ╔N ADDITION, A NUMERICAL
EXPRESSION MAY CONTAIN A LEADING + OR
-.
┼XAMPLES OF ASSIGNMENT STATEMENTS
EMBODYING NUMERICAL EXPRESSIONS ARE:
╧╬┼╓┴╥╔┴┬╠┼:=2*╨╔;
═┼┴╬:=(╪+┘)/2;
╓┴╥╔┴╬├┼:=(╪-═┼┴╬)*(╪-═┼┴╬)+
(┘-═┼┴╬)*(┘-═┼┴╬)
**** ├┴╠╠ ****
╘HE PROCEDURE CALL STATEMENT HAS THE
FORM:
├┴╠╠ <PROCEDURE IDENTIFIER>
WHERE <PROCEDURE IDENTIFIER> IS THE
NAME OF A PROCEDURE THAT HAS
PREVIOUSLY BEEN DECLARED. ╔T CAUSES
THE PROCEDURE TO BE EXECUTED. ┴FTER
EXECUTION OF THE PROCEDURE, EXECUTION
IS CONTINUED AFTER THE CALLING
STATEMENT. ┼XAMPLE:
├┴╠╠ ╨╥╧├
**** ╥┼┴─ ****
╘HE ╥┼┴─ STATEMENT HAS THE FORM:
╥┼┴─(<VARIABLE IDENTIFIER>)
AND WILL CAUSE A PROMPT, ']', ON THE
TERMINAL, FOLLOWING WHICH THE USER IS
EXPECTED TO KEY IN A NUMBER. ╘HIS
NUMBER WILL THEN BE ASSIGNED TO THE
VARIABLE. ┼XAMPLE:
╥┼┴─(╪)
**** ╫╥╔╘┼ ****
╘HE ╫╥╔╘┼ STATEMENT HAS THE FORM:
╫╥╔╘┼(<NUMERICAL EXPRESSION>
WHERE THE <NUMERICAL EXPRESSION> IS
DEFINED AS ABOVE. ╔TS EFFECT IS THAT
THE VALUE OF THE NUMERICAL EXPRESSION
IS COMPUTED AND DISPLAYED ON THE
TERMINAL.
┼XAMPLES:
╫╥╔╘┼(═┼┴╬);
╫╥╔╘┼(2*╔-23)
**** ╫╥╔╘┼╠╬ ****
╘HE ╫╥╔╘┼╠╬ STATEMENT CONSISTS OF THE
KEYWORD ╫╥╔╘┼╠╬ ONLY AND EFFECTS A
RETURN-LINEFEED ON THE TERMINAL.
┼XAMPLE:
╫╥╔╘┼╠╬
╘HE COMPOUND STATEMENTS (THOSE
STATEMENTS THAT EMBODY OTHER
STATEMENTS) ARE THE ┬┼╟╔╬-┼╬─ CLAUSE,
THE ╔╞ STATEMENT, AND THE ╫╚╔╠┼
STATEMENT.
**** ┬┼╟╔╬ AND ┼╬─ ****
╘HE ┬┼╟╔╬-┼╬─ CLAUSE IS USED MAINLY
IN CONNECTION WITH THE ╔╞ AND ╫╚╔╠┼
STATEMENTS AND IS A MEANS OF COUPLING
SEVERAL STATEMENTS SO THEY WILL BE
CONSIDERED A SINGLE STATEMENT - A
SORT OF PARANTHESIZING. ╘HE FORM OF
THE ┬┼╟╔╬..┼╬─ CLAUSE IS:
┬┼╟╔╬ <STATEMENT>;
<STATEMENT>; ... ┼╬─
WHERE THE ELLIPSIS (...) INDICATES
THAT THE REPETITION OF THE PAIR
<STATEMENT> AND ; MAY BE DONE AS MANY
TIMES AS NEEDED. ╔T IS NOT NECESSARY
TO INCLUDE THE SEMICOLON AFTER THE
LAST STATEMENT. ╘HE EXECUTION OF THE
┬┼╟╔╬..┼╬─ CLAUSE CONSISTS OF THE
EXECUTION OF EACH OF THE EMBODIED
STATEMENTS IN THEIR TEXTUAL ORDER.
┼XAMPLES:
┬┼╟╔╬ ┴:=3 ┼╬─;
┬┼╟╔╬
╥┼┴─(╬);
╫╥╔╘┼(2*(╬/6)+7);
╙╒═╬:=╙╒═╬+╬
┼╬─
**** ╔╞ ****
╘HE ╔╞ STATEMENT HAS THE FORM:
╔╞ <CONDITION> ╘╚┼╬ <STATEMENT>
WHERE <STATEMENT> MAY BE ANY
STATEMENT, ESPECIALLY A ┬┼╟╔╬-┼╬─
CLAUSE. ╘HE CONDITION IS DEFINED
BELOW. ╘HE EXECUTION OF THE ╔╞
STATEMENT DEPENDS ON THE CONDITION.
╔F THE CONDITION HOLDS THE STATEMENT
AFTER ╘╚┼╬ IS EXECUTED. ╔F THE
CONDITION DOES NOT HOLD, NOTHING WILL
HAPPEN.
┼XAMPLES:
╔╞ ╤<═╔╬ ╘╚┼╬ ═╔╬:=╤;
╔╞ ╪<>0 ╘╚┼╬
╔╞ ┘/╪<5 ╘╚┼╬
┬┼╟╔╬ ╥┼╙╒╠╘:=╪;
╫╥╔╘┼(╪);
╫╥╔╘┼╠╬
┼╬─
**** ╫╚╔╠┼ ****
╘HE ╫╚╔╠┼ STATEMENT HAS THE FORM:
╫╚╔╠┼ <CONDITION> ─╧ <STATEMENT>
WHERE THE ABOVE REMARKS APPLY. ╘HE
EXECUTION OF THE ╫╚╔╠┼ STATEMENT
PROCEEDS AS FOLLOWS. ╞IRST, THE
CONDITION IS EVALUATED. ╔F IT HOLDS,
THE STATEMENT AFTER ─╧ IS EXECUTED,
OTHERWISE THE EXECUTION OF THE ╫╚╔╠┼
STATEMENT FINISHED. ╞OLLOWING ANY
EXECUTION OF THE STATEMENT AFTER ─╧,
THE CONDITION IS AGAIN EVALUATED, AND
IF IT SHOWS UP TO HOLD, EXECUTION OF
THE STATEMENT AFTER ─╧ IS REPEATED.
╘HIS ALTERNATION BETWEEN EVALUATION
OF THE CONDITION AND EXECUTION OF THE
STATEMENT AFTER ─╧ IS CONTINUED UNTIL
THE CONDITION DOES NOT HOLD ANY
LONGER.
┼XAMPLES:
╫╚╔╠┼ ╧── ╔ ─╧ ╥┼┴─(╔);
╫╚╔╠┼ ╔<10 ─╧
┬┼╟╔╬ ╫╥╔╘┼(╔);
╔:=╔+1
┼╬─
**** ╧── AND RELATIVE OPERATORS ***
┴ CONDITION HAS EITHER THE FORM:
╧── <EXPRESSION>
AND IS FULLFILLED PRECISELY WHEN THE
VALUE OF THE EXPRESSION IS ODD, OR
<EXPR> <RELAT. OPERATOR> <EXPR>
WHERE <RELAT. OPERATOR> IS ONE OF THE
OPERATORS
< <= = >= > <>
╘HE CONDITION IS FULLFILLED PRECISELY
WHEN THE VALUE OF THE EXPRESSIONS
HAVE THE STATED RELATION TO EACH
OTHER. ┼XAMPLES ARE FOUND ABOVE IN
THE DISCUSSION OF THE ╔╞ AND ╫╚╔╠┼
STATEMENTS.
┴ PROGRAM CONSISTS OF FIRST A SET OF
DECLARATIONS, THEN A STATEMENT
UTILIZING THESE DECLARATIONS (THIS
WILL MOST OFTEN BE A ┬┼╟╔╬-┼╬─
CLAUSE), AND ENDS WITH A PERIOD ( .
). ╘HE DECLARATIONS WILL BE SUBJECT
OF THE NEXT PARAGRAPHS.
┴S MENTIONED, CONSTANTS, VARIABLES
AND PROCEDURES MAY BE DECLARED, AND
THE DECLARATIONS MUST BE IN THIS
SEQUENCE.
**** ├╧╬╙╘ ****
┴ CONSTANT DECLARATION HAS THE FORM:
├╧╬╙╘ <CONSTANT IDENTF>=<NUMBER>,
<CONSTANT IDENTF>=<NUMBER>, ... ;
WHERE THE ELLIPSIS (...) AGAIN
SIGNIFIES THAT ANY NUMBER OF
CONSTANTS CAN BE DECLARED, IF ONLY
THEY ARE SEPARA TED BY COMMAS. ╔T IS
NOT ALLOWED TO WRITE A COMMA BETWEEN
THE LAST <NUMBER> AN THE SEMICOLON.
┼XAMPLE:
├╧╬╙╘ ╨╔=3, ╘╫╧=2;
**** ╓┴╥ ****
┴ VARIABLE DECLARATION HAS THE FORM:
╓┴╥ <VARIABLE IDENTIFIER>,
<VARIABLE IDENTIFIER>,
... ;
WITH THE SAME USE OF THE ELLIPSIS.
┴GAIN, A COMMA MAY NOT APPEAR BETWEEN
THE LAST <VARIABLE IDENTIFIER> AND
THE SEMICOLON.
┼XAMPLE:
╓┴╥ ┴, ┬, ├, ╫, ─, ╓┴╥╔┴┬╠┼;
**** ╨╥╧├┼─╒╥┼ ****
┴ PROCEDURE DECLARATION HAS THE FORM:
╨╥╧├┼─╒╥┼ <PROC IDENTIFIER>;
<LOCAL CONSTANT, VARIABLE AND
PROCEDURE DECLARATIONS>;
<STATEMENT>;
WHERE THE STATEMENT MAY, OF COURSE,
BE A ┬┼╟╔╬-┼╬─ CLAUSE. ┼XAMPLES MAY
BE FOUND IN THE PROGRAM ╨╠0.╘┼╙╘1
┴NY DECLARATION HAS A SCOPE, WHICH IS
THE AREA OF THE PROGRAM FOR WHICH IT
IS IN EFFECT. ╘HE SCOPE OF A
DECLARATION IS THE PROCEDURE ╨ TO
WHICH IT IS LOKAL, PLUS THE
PROCEDURES DECLARED TO ╨ AND THE
PROCEDURES DECLARED LOCAL TO ANY OF
THESE PROCEDURES ETC., WITH THE
RESTRICTION THAT NO CONSTANT,
VARIABLE OR PROCEDURE MAY BE USED
BEFORE ITS DECLARATION. ╘HE MAIN
PROGRAM IS CONSIDERED A NAMELESS
PROCEDURE IN THIS RESPECT.
╞ILES CREATED BY ╪╨╠0
---------------------
╞ROM THE PROGRAM FILE
╨╠0.╬┴═┼
THE FOLLOWING FILES ARE CREATED BY
THE ╪╨╠0 COMPILER:
BY ╪╨╠╧╠┼╪╔: ╠┼╪.╬┴═┼
BY ╪╨╠0├╧═╨: ├╧─.╬┴═┼
THE LAST FILE ONLY IF NO ERRORS ARE
FOUND DURING COMPILATION.
╘HE PROGRAM ╪╨╠0╔╬╘╨ EXECUTES THE
CODE FROM THE FILE ├╧─.╬┴═┼.
╘HE COMPILED CODE CAN BE READ WITH
THE OPTION ╨ (╨RINTOUT OF THE CODE)
IN THE ╪╨╠0 MAIN MENU.
╞ILES USED BY ╪╨╠0
------------------
╘HE FOLLOWING FILES ARE USED BY THE
╪╨╠0 COMPILER:
╪╨╠0─┴╘┴ : THIS FILE CONTAINS THE
NAME OF THE PROGRAM SOURCE FILE, AND
THE NAME OF THE OUTPUT FILE (─╙: OR
╠╨:). ╘HIS FILE CANNOT NOT BE READ IN
├╧═┴╠ EDIT MODE.
╪╨╠0═┼╙╙ : THIS FILE CONTAINS THE COM
PILER ERROR MESSAGES. ╔T IS A NORMAL
├╧═┴╠ ╠╔╙╘ FILE WITH ONLY REMARK
STATE MENTS. ╔N COMMAND MODE THIS
FILE CAN BE READ AFTER:
┼╬╘┼╥ "XPL0MESS"
╠╔╙╘
╪╨╠0╚┼╠╨ : THIS FILE CONTAINS A ╚┼╠╨
TEXT FOR THE ╪╨╠0 COMPILER. ╔T IS
ALSO A NORMAL ├╧═┴╠ ╠╔╙╘ FILE SO THE
FILE CAN BE READ AFTER
┼╬╘┼╥ "XPL0HELP"
╠╔╙╘
╘HIS LAST FILE IS ALSO USED IN THE
COMPILER MAIN MODULE AFTER THE CHOICE
OF THE OPTION ─ (─IRECTIONS OF USE).
╚OW TO CREATE AN ╪╨╠0 SOURCE FILE
---------------------------------
┴N ╪╨╠0 SOURCE FILE IS A NORMAL ├╧═┴╠
╠╔╙╘ FILE CONSISTING OF ONLY ╥┼═ARKED
LINES. ╙O THESE SOURCE FILES CAN BE
CREATED USING ├╧═┴╠'S OWN EDITOR
FACILITIES.
╬OTE:
┴LL ╪╨╠0 KEYWORDS, MUST BE WRITTEN IN
LOWER CASE CHARACTERS:
CONST
VAR
BEGIN .. END
READ
WRITE
WRITELN
PROCEDURE
CALL
IF .. THEN
WHILE .. DO
ODD
┴N EXAMPLE.
0010 // VAR TAB, N, PROD;
0020 //
0030 // BEGIN
0040 // READ(TAB);
0040 // WHILE TAB>0 DO
0050 // BEGIN
0060 // N:=0;
0070 // WHILE N<10 DO
0080 // BEGIN
0090 // N:=N+1;
0100 // PROD:=N*TAB;
0110 // WRITE(N); WRITE(PROD);
0120 // WRITELN;
0130 // END;
0140 // WRITELN;
0150 // READ(TAB)
0160 // END;
0170 // END.
┼VERY PROGRAM LINE MUST START WITH
//.
╠╔╙╘ THIS PROGRAM TO DISK, ALWAYS
USING THE PREFIX
╨╠0.
═ORE INFORMATION CAN BE FOUND WITH
THE OPTION ─ IN THE MAIN MODULE OF
THE ╪╨╠0 COMPILER.